
#include "ControladorLecturaCliente.h"
	
ControladorLecturaCliente::ControladorLecturaCliente(Punto posicionJugador, int tipoPersonaje, int pisoNivel, int anchoNivel, int altoNivel, int gravedad) {
	
	pthread_mutex_init(&mutexEstadoLectura, NULL);
	pthread_mutex_init(&mutexJugador, NULL);
	
	string nombre_personaje = GestionTiposPersonaje::getListaTipos().at(tipoPersonaje);
	Personaje* personaje = new Personaje(posicionJugador.getX(), posicionJugador.getY(), anchoNivel, altoNivel, nombre_personaje);
	GestionTiposPersonaje::AsignarTipoPersonaje(personaje, nombre_personaje);
	personaje->setPiso(pisoNivel);
	personaje->setGravedad(gravedad);
	personaje->setPeriodoSalto();
	personaje->setAlturaMaximaRelativa();
	this->controlador = new InputServidor (personaje, tipoPersonaje);
	
	setEstadoLectura(LecturaCargando);
}

ControladorLecturaCliente::~ControladorLecturaCliente() {
	
	pthread_mutex_destroy(&mutexEstadoLectura);
	
	pthread_mutex_lock(&mutexJugador);
	delete controlador;
	pthread_mutex_unlock(&mutexJugador);
	
	pthread_mutex_destroy(&mutexJugador);
}

EstadoThreadLectura ControladorLecturaCliente::getEstadoLectura() {

	pthread_mutex_lock(&mutexEstadoLectura);
	EstadoThreadLectura e = threadLectura.second;
	pthread_mutex_unlock(&mutexEstadoLectura);
	
	return e;
}

void ControladorLecturaCliente::setEstadoLectura(EstadoThreadLectura estado) {

	pthread_mutex_lock(&mutexEstadoLectura);
	threadLectura.second = estado;
	pthread_mutex_unlock(&mutexEstadoLectura);
}

InputServidor* ControladorLecturaCliente::getControlador() {
	
	return controlador;
}

void ControladorLecturaCliente::LockJugador() {
	
	pthread_mutex_lock(&mutexJugador);

}

void ControladorLecturaCliente::UnlockJugador() {
	
	pthread_mutex_unlock(&mutexJugador);
	
}
